home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Nibble Volume 12, No. 10 (1991-10)(MindCraft Publishing)(Side A).zip
/
Nibble Volume 12, No. 10 (1991-10)(MindCraft Publishing)(Side A).po
/
CURSOR.5.S
< prev
next >
Wrap
Text File
|
1996-12-24
|
5KB
|
190 lines
********************************
* CURSOR.5 *
* by Mark R. Craven *
* *
* Copyright (C) 1991 by *
* MindCraft Publishing Corp. *
* Lincoln, MA 01773 *
* *
* Modified from CURSOR.BAR *
* by Jim Ganz *
* *
* (Nibble Magazine, Dec '84) *
* *
* Syntax: *
* CALL MEM,TOPLIM,BOTLIM, *
* LMRGIN,RMRGIN *
* *
* TOPLIM=(1-24) BOTLIM=1-24) *
* LMRGIN=(1-40) RMRGIN=(1-40) *
* *
* Returns with LINE = PEEK(4) *
* ESC=LINE =0 *
* '?'=LINE = 255 *
* *
* e.g. CALL 768,2,18,10,30 *
* *
* APPLESOFT TOOLKIT ASSEMBLER *
* *
********************************
********************************
* Equates: *
********************************
BASCALC EQU $FBC1
BASL EQU $28
BOTLIM EQU $03
CHKCOM EQU $DEBE
CLRKBD EQU $C010
FRMNUM EQU $DD67
CONINT EQU $E6FB
KYBD EQU $C000
LINE EQU $04
MEM EQU $300
TOPLIM EQU $02
;
LMRGIN EQU $06 ;LEFT MARGIN
RMRGIN EQU $07 ;RIGHT MARGIN
ORG MEM
********************************
* Initialize limits *
********************************
JSR CHKCOM ;Advance TXTPTR past comma
JSR FRMNUM ;Get variable/expression
JSR CONINT ;Convert to integer in X
DEX
STX TOPLIM
STX LINE
JSR CHKCOM
JSR FRMNUM
JSR CONINT
DEX
STX BOTLIM
JSR CHKCOM
JSR FRMNUM
JSR CONINT
DEX
STX LMRGIN ;Left Margin Value
JSR CHKCOM
JSR FRMNUM
JSR CONINT
DEX
STX RMRGIN ;Right Margin Value
********************************
* Highlight cursor line *
* (change NORMAL to INVERSE) *
********************************
START LDA LINE
JSR BASCALC ;Set BASL,H
LDY RMRGIN ;Right Margin
CLOOP1 LDA (BASL),Y ;Get a Character
CMP #$A0 ;Is it a SPACE?
BNE CBAR
DEY
BPL CLOOP1 ;Test for blank line
BMI LEFT
CBAR LDY RMRGIN
CLOOP4 LDA (BASL),Y
AND #$3F ;Change it to inverse
STA (BASL),Y ;and put it back.
DEY
CPY LMRGIN ;Compare to left margin
BPL CLOOP4 ;Loop til end of line
********************************
* Wait for keypress *
********************************
LDA CLRKBD ;Clear keyboard
KLOOP LDX KYBD ;Get keypress
LEFT CPX #$88 ;Is it a LEFT ARROW?
BEQ CONT
CPX #$8B ;Is it a DOWN ARROW?
BEQ CONT
CPX #$95 ;Is it a RIGHT ARROW?
BEQ CONT
CPX #$8A ;Is it an UP ARROW?
BEQ CONT
CPX #$8D ;Is it a RETURN char?
BEQ CALLER ;Go exit if RETURN
CPX #$BF ;Is it a '?'
BEQ HELP ;Load 255 into memory
CPX #$9B ;Is it the ESC Character?
BEQ ESC ;Exit without a choice
BNE KLOOP ;None of the above.
HELP LDA #$FE ;Help flag
CLC
BCC OUT1
ESC LDA #$00 ;Put zero in accumulator
STA LINE ;Store the ESC flag
BEQ OUT2
BACK BNE START ;Loop back to start
********************************
* Return to caller *
********************************
CALLER LDY RMRGIN ;Reset last line to NORMAL
CLOOP3 LDA (BASL),Y
ORA #$80
STA (BASL),Y
DEY
CPY LMRGIN ;Check left margin
BPL CLOOP3
LDA LINE
SEC
SBC TOPLIM
OUT1 STA LINE
INC LINE
OUT2 LDA CLRKBD
RTS ;Exit
********************************
* Lowlight cursor line *
* (Change INVERSE to NORMAL) *
********************************
CONT LDY RMRGIN ;Load right margin value
CLOOP2 LDA (BASL),Y
ORA #$80 ;Change to NORMAL
STA (BASL),Y
DEY
CPY LMRGIN ;Check left margin
BPL CLOOP2
LDA LINE
CPX #$95
BEQ RCONT
CPX #$8A ;Right arrow
BEQ RCONT
********************************
* Move cursor up one line *
********************************
CMP TOPLIM ;Are we above the top line?
BNE LCONT ;No, so move up one line.
LDA BOTLIM ;Wraparound to bottom line
STA LINE
BNE BACK ;Always.
LCONT DEC LINE
BPL BACK
********************************
* Move cursor down one line *
********************************
RCONT CMP BOTLIM ;Are we below the bottom line?
BNE RCONT1 ;No, so move down one line
LDA TOPLIM ;Wraparound to top line.
STA LINE
BPL BACK
RCONT1 INC LINE
BNE BACK ;Back to START